﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using BUS;
using DTO;
using System.Runtime.InteropServices;

namespace HOTEL_MANAGEMENT
{
    public partial class frmTT_LapHoaDon : DevExpress.XtraEditors.XtraForm
    {
        //Các biến cục bộ
        int f = 0;
        DataTable table = new DataTable();
        //danh sách phòng cần thanh toán
        List<CPHONGDTO> dsPhongThanhToanHD = new List<CPHONGDTO>();
        //danh sách mã phiếu thuê cần cập nhật lại mã hóa đơn
        List<int> dsMaPhieuThueCapNhat = new List<int>();
        //ngày lập hóa đơn
        private DateTime m_NgayKetThuc;
        public DateTime NgayKetThuc
        {
            get { return m_NgayKetThuc; }
            set { m_NgayKetThuc = value; }
        }
        int stt = 0;
        private void XoaTrangFrom()
        {
            txttenKhachHang.Text = "";
            txtdiaChi.Text = "";
            txtphongCanThanhToan.Text = "";
        }
        private bool KiemTraPhongDaThem(string tenPhong)
        {
            foreach (CPHONGDTO phongDto in dsPhongThanhToanHD)
            {
                if (phongDto.TenPhong == tenPhong)
                {
                    return true;
                }
            }
            return false;
        }
        public frmTT_LapHoaDon()
        {
            InitializeComponent();
        }   
        private void frmTT_LapHoaDon_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult result = MessageBox.Show("Bạn có muốn thoát hay không", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (result == DialogResult.Yes)
            {
                STT_LapHoaDon.Xoa();
            }
            else
            {
                e.Cancel = true;
            }       
        }

        private void frmTT_LapHoaDon_Load(object sender, EventArgs e)
        {
            btnhuyBo.Visible = false;
            NgayKetThuc = DateTime.Now;
            // txttriGia.ReadOnly = true;
            gvdanhSachPhongThanhToan.SelectAll();
            //btnthanhToan.Hide();
            //btnin.Hide();
            txtNgayKetThuc.Text = NgayKetThuc.ToString();
            table = new DataTable();
            table.Columns.Add("STT", typeof(int));
            table.Columns.Add("Phòng", typeof(string));
            table.Columns.Add("Số Ngày Thuê", typeof(int));
            table.Columns.Add("Đơn Giá", typeof(long));
            table.Columns.Add("Thành Tiền", typeof(long));
            gridControl1.DataSource = table;
        }

        private void btnthemPhong_Click(object sender, EventArgs e)
        {
            string tenPhong = txtphongCanThanhToan.Text;
            if (KiemTraPhongDaThem(tenPhong) == false)
            {
                int songaythue = 0;
                long dongia = 0;
                long thanhtien = 0;
                int maPhong = 0;
                try
                {
                    CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
                    CHOADONBUS.ThongTinHoaDon(ref phieuthueDto, ref maPhong, tenPhong, ref songaythue, ref dongia, ref thanhtien);
                    if (maPhong > 0)
                    {
                        btnhuyBo.Visible = true;
                        if (songaythue > 0)
                        {
                            stt++;//so thue tu tang 
                            CPHONGDTO phongDto = new CPHONGDTO();
                            phongDto.TenPhong = tenPhong;
                            phongDto.MaPhong = maPhong;
                            txttriGia.Text = "" + (int.Parse(txttriGia.Text) + thanhtien);
                            //add phòng cần thanh toán vào danh sách phòng
                            dsPhongThanhToanHD.Add(phongDto);
                            //add mã của các phiếu thuê cần cập nhật mã hóa đơn
                            dsMaPhieuThueCapNhat.Add(phieuthueDto.MaPhieuThue);
                            //add dòng vào bảng table
                            table.Rows.Add(stt, tenPhong, songaythue, dongia, thanhtien);
                        }
                        else if (songaythue == 0)
                        {
                            MessageBox.Show("Phòng Mới được thuê", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            DialogResult result = MessageBox.Show("Bạn có Muốn Thanh Toán \nNếu thanh toán bạn sẽ phải thanh toán một ngày", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            if (result == DialogResult.Yes)
                            {
                                stt++;
                                songaythue = 1;
                                thanhtien = dongia * songaythue;
                                txttriGia.Text = "" + (int.Parse(txttriGia.Text) + thanhtien);
                                CPHONGDTO phongDto = new CPHONGDTO();
                                phongDto.TenPhong = tenPhong;
                                phongDto.MaPhong = maPhong;
                                //add phòng cần thanh toán vào danh sách phòng
                                dsPhongThanhToanHD.Add(phongDto);
                                //add mã của các phiếu thuê cần cập nhật mã hóa đơn
                                dsMaPhieuThueCapNhat.Add(phieuthueDto.MaPhieuThue);
                                //add dòng vào bảng table
                                table.Rows.Add(stt, tenPhong, songaythue, dongia, thanhtien);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Phòng vừa nhập không đúng hoặc phòng chưa được thuê", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch
                {
                    MessageBox.Show("Bạn vui lòng kiểm tra lại kết nối ", "Lỗi kết nối", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Phòng vừa nhập đã tồn tại", "Thông Báo Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnhuyBo_Click(object sender, EventArgs e)
        {
            if (gvdanhSachPhongThanhToan.RowCount > 0)
            {
                table.Clear();
                XoaTrangFrom();
                dsMaPhieuThueCapNhat.Clear();
                dsPhongThanhToanHD.Clear();
                txttriGia.Text = "0";
                btnhuyBo.Visible = false;
               
            }            
        }

        private void btnthanhToan_Click(object sender, EventArgs e)
        {
            if (txttenKhachHang.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập tên khách thanh toán", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txttenKhachHang.Focus();
                return;
            }
            else if(CNGUOIDUNGBUS.kiemTraChuoiLaSo(txttienKhach.Text)==false)
            {
                MessageBox.Show("Tiền thanh toán phải là số","Thông báo");
                txttienKhach.Focus();
                return;

             }
            else
            {
                if (dsPhongThanhToanHD.Count > 0)
                {
                    try
                    {
                        if(txttienKhach.Text!="")
                        {
                            if (int.Parse(txttriGia.Text) <= int.Parse(txttienKhach.Text))
                            {
                                f = 1;
                                btnhuyBo.Visible = false;
                                txttienDu.Text = "" + (int.Parse(txttriGia.Text) - int.Parse(txttienKhach.Text));
                                CHOADONDTO hoadonDto = new CHOADONDTO();
                                hoadonDto.TenKhachThanhToan = txttenKhachHang.Text;
                                hoadonDto.DiaChi = txtdiaChi.Text;
                                hoadonDto.TriGia = int.Parse(txttriGia.Text);
                                hoadonDto.NgayKetThuc = NgayKetThuc;
                                hoadonDto.MaTiepTan = SM_DangNhap.getInstance().MaNguoiDung;
                                try
                                {
                                    CHOADONBUS.ThanhToanHoaDon(dsPhongThanhToanHD, dsMaPhieuThueCapNhat, hoadonDto);
                                    MessageBox.Show("Thanh toán hóa đơn thành công", "Thông Báo", MessageBoxButtons.OK);
                                }
                                catch
                                {
                                    MessageBox.Show("Thanh toán hóa đơn thất bại", "Thông Báo Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                               
                            }
                            else
                            {
                                MessageBox.Show("vui lòng kiểm kiểm tra lại tiền khách đưa","Thông Báo");
                            }

                        }
                        else
                            MessageBox.Show("Vui Lòng Nhập Tiền Khách Đưa", "Thông Báo");
                    }
                    catch
                    {
                        MessageBox.Show("Bạn vui lòng kiểm tra lại kết nối ", "Lỗi kết nối", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("Bạn chưa thêm phòng cần thanh toán", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnin_Click(object sender, EventArgs e)
        {
            if (f==1)
            {
                txtdiaChi.ReadOnly = true;
                txtphongCanThanhToan.ReadOnly = true;

                txttienKhach.ReadOnly = true;
                txttenKhachHang.ReadOnly = true;
                btnhuyBo.Visible = false;
                btnin.Text = "Trở Lại";
                btnthanhToan.Visible = false;
                btnthemPhong.Visible = false;
                f = 0;
            }
            else
            {
                txtdiaChi.ReadOnly = false;
                txtphongCanThanhToan.ReadOnly = false;

                txttienKhach.ReadOnly = false;
                txttenKhachHang.ReadOnly = false;
                btnhuyBo.Visible = true;
                btnin.Text = "IN";
                btnthanhToan.Visible = true;
                btnthemPhong.Visible = true;
                table.Clear();
                dsMaPhieuThueCapNhat.Clear();
                dsPhongThanhToanHD.Clear();
                XoaTrangFrom();
            }
        }
    }
}